home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 12: Textmags & Docs / nf_archive_12.iso / MAGS / SOURCES / ATARI_SRC.ZIP / atari source / DSMODS / SETUP.C < prev    next >
Encoding:
C/C++ Source or Header  |  2001-02-10  |  13.2 KB  |  601 lines

  1. /****************************************************************************/
  2. /* HISTORY                                    */
  3. /*                                        */
  4. /* 11/02/89    - do_pwrup()                            */
  5. /*          When the dress is changed, gltxtattr.font will contain    */
  6. /*          the UID number of the first font in the dress.        */
  7. /*                                        */
  8. /* 11/06/89    - do_pwrup()                            */
  9. /*          When ok is clicked, write out the filenames in GOG.DFT    */
  10. /****************************************************************************/
  11. #include    <gemdefs.h>
  12. #include    <obdefs.h>
  13. #include    <osbind.h>
  14. #include    "deskset2.h"
  15. #include    "comp.h"
  16.  
  17. extern    unsigned    hlq[UNIT4], vlq[UNIT4];
  18. extern    double        hrq[UNIT4], vrq[UNIT4], modf();
  19. extern    struct txtattr    gltxtattr;        /* global text attrib    */
  20. extern    char        syspath[];        /* boot up  path...    */
  21. extern    char        widpath[];        /* WID file path...    */
  22. extern    char        *dpath1;        /* TXT file path...    */
  23. extern    char        *get_edit();
  24. extern     unsigned long     gl_region_ptr;        /* selected text region    */
  25. extern    unsigned    formval;
  26. extern    int        unit_type, pagetype;    /* Atari setup Vars    */
  27. extern  int         attr_flag[];        /* cjg             */
  28.  
  29. static    char    drsex[] = "*.DRS";        /* gdosfname mode 0    */
  30. static    char    exdex[] = "*.DIC";        /* gdosfname mode 1    */
  31. static    char    lytex[] = "*.LYT";        /* gdosfname mode 2    */
  32. static    char    widex[] = "*.WID";        /* gdosfname mode 3    */
  33. static    char    txtex[]    = "*.TXT";        /* gdosfname mode 4    */
  34. static    int    deskx, desky, deskw, deskh;
  35.  
  36. char        fs_iinsel[14];        /* filename from gdosfname()    */
  37. int        Pval;            /* parmcheck() result value    */
  38.  
  39. updATTr()                /* ATARI */
  40. {
  41.      upd_txt_attributes();        /* update one or many regions */
  42.                     /* function found in resource */
  43. }
  44.  
  45.  
  46. do_hylang()
  47. {
  48.     OBJECT    *hyobj;
  49.     int    button;
  50.     char    svhylg;
  51.  
  52.     rsrc_gaddr(0,HYLAN,&hyobj);
  53.     set_nor(hyobj,ENG,DAN);
  54.     hyobj[setp.hylg].ob_state = SELECTED;
  55.     svhylg = setp.hylg;
  56.  
  57.     button = execform(hyobj,0);
  58.     hyobj[button].ob_state = NORMAL;
  59.     if (button == HYLOK && whichSEL(hyobj,&setp.hylg,ENG,DAN)) {
  60.         ++setp.hylg;
  61.         if (!ld_lang()) {        /* load Hyp. language    */
  62.             setp.hylg = svhylg;    /* if error reload old    */
  63.             ld_lang();
  64.         }
  65.     }
  66. }
  67.  
  68. do_hypar()
  69. {
  70.     OBJECT    *hyparobj;
  71.     int    button;
  72.     int    i, j, k;
  73.     
  74.     clr_attr_flag();    /* cjg */
  75.  
  76.     rsrc_gaddr(0,HYPARS,&hyparobj);
  77.     set_int(hyparobj,SUHY ,gltxtattr.nsuchyp);
  78.     set_int(hyparobj,CHBHY,gltxtattr.nbefhyp);
  79.     set_int(hyparobj,CHAHY,gltxtattr.nafthyp);
  80.     set_nor(hyparobj,HMOFF,HMON);
  81.     hyparobj[gltxtattr.hypmd ? HMON:HMOFF].ob_state = SELECTED;
  82.  
  83.     formval = SUHY;
  84.     dial1(hyparobj);
  85. err:    button = dial2(hyparobj);
  86.     if (button == HYOK) {
  87.         i = get_int(hyparobj,SUHY);
  88.         j = get_int(hyparobj,CHBHY);
  89.         k = get_int(hyparobj,CHAHY);
  90.         if (!ck_hyerr(i,j,k,SUHY,CHBHY,CHAHY)) {
  91.             gltxtattr.hypmd = (hyparobj[HMON].ob_state & SELECTED);
  92.             gltxtattr.nsuchyp = i;
  93.             gltxtattr.nbefhyp = j;
  94.             gltxtattr.nafthyp = k;
  95.            attr_flag[9]=attr_flag[10]=attr_flag[11]=attr_flag[12]=1; /* CJG*/
  96.         }
  97.         else    goto err;
  98.         updATTr();        /* ATARI */
  99.     }
  100.     dial3();
  101. }
  102.  
  103. do_pwrup()
  104. {
  105.     OBJECT    *pwobj;
  106.     int    button;
  107.     char    drsbuf[16], dicbuf[16], lytbuf[16];
  108.     char    buf1[100], buf2[100], buf3[100];
  109.     int    *fntptr;
  110.         
  111.     rsrc_gaddr(0,PWFILES,&pwobj);
  112.     set_str(pwobj,DRESS,setp.ftdrs,drsbuf);
  113.     set_str(pwobj,DICT,setp.edict,dicbuf);
  114.     set_str(pwobj,LAYOUT,setp.kblyt,lytbuf);
  115.  
  116.     do {
  117.       button = execform(pwobj,0);
  118.       pwobj[button].ob_state = NORMAL;
  119.       BWredraw();                    /* redraw TW/PW    */
  120.       switch (button) {
  121.       case DRESS:
  122.         if (gdosfname(buf1,0,0))
  123.             strcpy(drsbuf,fs_iinsel);
  124.         break;
  125.       case DICT:
  126.         if (gdosfname(buf2,1,1))
  127.             strcpy(dicbuf,fs_iinsel);
  128.         break;
  129.       case LAYOUT:
  130.         if (gdosfname(buf3,2,1))
  131.             strcpy(lytbuf,fs_iinsel);
  132.         break;
  133.       case PWOK:
  134.         if (strcmp(setp.ftdrs,drsbuf)) {
  135.           if (Fnt_cmd('L',buf1))    /* load Font dress..    */
  136.           {
  137.             strcpy(setp.ftdrs,drsbuf);
  138.             fntptr = ftlib;
  139.             gltxtattr.font = *fntptr;    
  140.           }
  141.         }
  142.         if (strcmp(setp.edict,dicbuf)) {
  143.           if (ld_dict(buf2,1))        /* load Dictionary..    */
  144.             strcpy(setp.edict,dicbuf);
  145.         }
  146.         if (strcmp(setp.kblyt,lytbuf)) {
  147.           if (ld_lyt(lytbuf) == 2)    /* load Keyboard Layout    */
  148.             strcpy(setp.kblyt,lytbuf);
  149.         }
  150.         write_GOG();            /* write out new files. */
  151.         break;
  152.       }
  153.     } while (button != PWOK && button != PWCAN);
  154. }
  155.  
  156. do_chcomp()
  157. {
  158.     OBJECT    *compobj;
  159.     int    button;
  160.     char    *mcc, sel;
  161.  
  162.         clr_attr_flag();
  163.  
  164.     rsrc_gaddr(0,CHARCOMP,&compobj);
  165.     set_nor(compobj,ACCSET1,ACCSET3);
  166.     set_nor(compobj,ACCOFF,ACCON);
  167.     set_nor(compobj,MCCOFF,MCCON);
  168.     set_int(compobj,MCCSETVL,gltxtattr.mcomp / 2);
  169.     compobj[gltxtattr.mcomp ? MCCON:MCCOFF].ob_state = SELECTED;
  170.     compobj[gltxtattr.acomp ? ACCON:ACCOFF].ob_state = SELECTED;
  171.     if (gltxtattr.acomp)
  172.         compobj[gltxtattr.acomp == 1 ? ACCSET1:
  173.             gltxtattr.acomp == 2 ? ACCSET2:
  174.             ACCSET3].ob_state = SELECTED;
  175.  
  176.     formval = MCCSETVL;
  177.     dial1(compobj);
  178.     button = dial2(compobj);
  179.     if (button == COMPOK) {
  180.         if (compobj[ACCON].ob_state == SELECTED &&
  181.             whichSEL(compobj,&sel,ACCSET1,ACCSET3)) {
  182.             gltxtattr.acomp = ++sel;
  183.         }
  184.         else    gltxtattr.acomp = 0;
  185.         attr_flag[7] = 1;
  186.  
  187.         if (compobj[MCCON].ob_state == SELECTED) {
  188.             mcc = get_edit(compobj,MCCSETVL);
  189.             gltxtattr.mcomp = atoi(mcc) * 2;
  190.         }
  191.         else    gltxtattr.mcomp = 0;
  192.         attr_flag[6] = 1;
  193.         updATTr();        /* ATARI */
  194.     }
  195.     dial3();
  196. }
  197.  
  198.  
  199. do_wdsp()
  200. {
  201.     OBJECT    *wdspobj;
  202.     int    button, i, j, k;
  203.  
  204.     clr_attr_flag();
  205.  
  206.     rsrc_gaddr(0,WORDSPC,&wdspobj);
  207.     set_nor(wdspobj,LSPOFF,LSPON);
  208.     set_int(wdspobj,CPPOS,gltxtattr.plts);
  209.     set_int(wdspobj,CPNEG,gltxtattr.nlts);
  210.     set_int(wdspobj,CPMIN,gltxtattr.minsp);
  211.     set_int(wdspobj,CPPRF,gltxtattr.prfsp);
  212.     set_int(wdspobj,CPMAX,gltxtattr.maxsp);
  213.     wdspobj[gltxtattr.ltsmd ? LSPON:LSPOFF].ob_state = SELECTED;
  214.  
  215.     formval = CPMIN;
  216.     dial1(wdspobj);
  217. err:    button = dial2(wdspobj);
  218.     if (button == CPOK) {
  219.         gltxtattr.plts = get_int(wdspobj,CPPOS);
  220.         if ((i = get_int(wdspobj,CPNEG)) > 6) {
  221.             formval = CPNEG;
  222.             do_alert(BADINP);
  223.             goto err;
  224.         }
  225.         else    gltxtattr.nlts = i;
  226.         i = get_int(wdspobj,CPMIN);
  227.         j = get_int(wdspobj,CPPRF);
  228.         k = get_int(wdspobj,CPMAX);
  229.         if (!ck_sperr(i,j,k,CPMIN,CPPRF,CPMAX)) {
  230.             gltxtattr.minsp = i;
  231.             gltxtattr.prfsp = j;
  232.             gltxtattr.maxsp = k;
  233.             attr_flag[16] = attr_flag[17] = attr_flag[18] = 1;
  234.         }
  235.         else    goto err;
  236.         gltxtattr.ltsmd = (wdspobj[LSPON].ob_state & SELECTED);
  237.         attr_flag[13] = 1;
  238.         updATTr();        /* ATARI */
  239.     }
  240.     dial3();
  241. }
  242.  
  243. do_just()
  244. {
  245.     OBJECT    *justobj;
  246.     int    button;
  247.     char    sel;
  248.  
  249.     clr_attr_flag();
  250.  
  251.     rsrc_gaddr(0,JUSTIFI,&justobj);
  252.     set_nor(justobj,AUTOJUST,AUTOCTR);
  253.     justobj[gltxtattr.jstmd+AUTOJUST].ob_state = SELECTED;
  254.  
  255.     button = execform(justobj,0);
  256.     justobj[button].ob_state = NORMAL;
  257.     if (button == JUSTOK && whichSEL(justobj,&sel,AUTOJUST,AUTOCTR))
  258.     {
  259.         gltxtattr.jstmd = sel;
  260.         attr_flag[21] = 1;
  261.         updATTr();        /* ATARI */
  262.     }
  263. }
  264.  
  265. ck_hyerr(i,j,k,v1,v2,v3)
  266. int    i, j, k, v1, v2, v3;
  267. {
  268.     if (!i) {
  269.           formval = v1;
  270. err:        do_alert(BADINP);
  271.         return(1);
  272.     }
  273.     else
  274.     if (j < 2) {
  275.           formval = v2;
  276.         goto err;
  277.     }
  278.     else
  279.     if (k < 2) {
  280.           formval = v3;
  281.         goto err;
  282.     }
  283.     return(0);
  284. }
  285.  
  286. ck_sperr(i,j,k,v1,v2,v3)
  287. int    i, j, k, v1, v2, v3;
  288. {
  289.     if ((i + j) > 99) {
  290.         formval = v1;
  291. err:        do_alert(BADINP);
  292.         return(1);
  293.     }
  294.     else
  295.     if ((i + k) > 99) {
  296.         formval = v2;
  297.         goto err;
  298.     }
  299.     else
  300.     if (j > k) {
  301.         formval = v3;
  302.         goto err;
  303.     }
  304.     return(0);
  305. }
  306.  
  307. /*
  308.     Routine to copy a source digit string "s" to a target one "t"
  309.     while counting the number of digit.
  310.     Return updated source pointer.
  311. */
  312. static    char    *gNstr(s,t,ndig)
  313. char    *s, *t, *ndig;
  314. {
  315.     *ndig = 0;
  316.     while (cdigit(*s))
  317.     { *t++ = *s++; ++(*ndig); }
  318.     *t = 0;
  319.     return(s);
  320. }
  321.  
  322. /*
  323.     Input string conversion and Value check
  324.     cmd    1 - X value
  325.         2 - Point/Set size
  326.         3 - Y value
  327.         4 - LineSpace
  328.     nflag = 0 - don't allow negative numbers.
  329.         1 - Allow negative numbers.
  330. */
  331. checkValue(input,cmd,nflag)
  332. char    *input;
  333. int    cmd;
  334. int    nflag;
  335. {
  336.     char        bfdot[8], afdot[8], ldig, rdig;
  337.     unsigned    lnum, rnum, maxx, maxy, maxls;
  338.     int        erf = 0;
  339.     double        dval, intg;
  340.     int flag;
  341.  
  342.     flag = 0;
  343.     if (*input) {
  344.         if((*input == '-')&& nflag)
  345.         {
  346.              input++;
  347.              flag = 1;
  348.         }
  349.  
  350.         input = gNstr(input,bfdot,&ldig);
  351.         if (ldig > 4)
  352.             goto err;
  353.     }
  354.     else    goto err;
  355.     if (*input == '.') {
  356.         input = gNstr(++input,afdot,&rdig);
  357.         if (rdig > 2)
  358.             goto err;
  359.     }
  360.     else    afdot[0] = rdig = 0;
  361.     if (*input)
  362.         goto err;
  363.     lnum = atoi(bfdot);
  364.     rnum = atoi(afdot);
  365.     if (cmd != 2 && !unit_type && rdig == 1)
  366.         rnum *= 10;
  367.     getmax(&maxx,&maxy,&maxls);
  368.     switch (cmd) {
  369.     case 1:                    /* all line measures    */
  370.         if (rnum >= hlq[unit_type])
  371.             goto err;
  372.         dval =    (double)lnum *        /* convert XXX. first    */
  373.             (double)hlq[unit_type] * hrq[unit_type];
  374.         if (rnum > 0)            /* convert .XX to add    */
  375.             dval += ((double)rnum * hrq[unit_type]);
  376.         dval = modf(dval,&intg);    /* get mod. to adjust    */
  377.         lnum = (unsigned)intg;        /* get integral part    */
  378.         if (dval >= 0.5)
  379.             ++lnum;
  380.         if (lnum > maxx)        /* validate new value    */
  381. err:            erf = 1;
  382.         else    Pval = lnum;
  383.         break;
  384.     case 2:                    /* all point sizes    */
  385.         if (!lnum            /* no zero on XXX.    */
  386.             ||
  387.            (rnum != 0 && rnum != 5)    /* .X is only 0 or 5    */
  388.             ||
  389.            (setp.omod == 2 &&        /* special for CG 8200:    */
  390.             lnum >= 36 && rnum))    /* 36-72 pt in 1pt inc    */
  391.             goto err;
  392.         lnum = pt12(lnum,rnum);        /* compute 8th pt value    */
  393.         if (ptszck(lnum))        /* validate new value    */
  394.             goto err;
  395.         else    Pval = lnum;
  396.         break;
  397.     case 3:                    /* all depth measures    */
  398.     case 4:                    /* all LineSpaces    */
  399.         if (rnum >= vlq[unit_type])    /* .XX within range    */
  400.             goto err;
  401.         dval =    (double)lnum *        /* convert XXX. first    */
  402.             (double)vlq[unit_type] * vrq[unit_type];
  403.         if (rnum > 0)            /* convert .XX to add    */
  404.             dval += ((double)rnum * vrq[unit_type]);
  405.         dval = modf(dval,&intg);    /* get mod. to adjust    */
  406.         lnum = (unsigned)intg;        /* get integral part    */
  407.         if (dval >= 0.5)
  408.             ++lnum;
  409.         if (cmd == 3) {
  410.           if (lnum > maxy)        /* validate new depth    */
  411.             goto err;
  412.         }
  413.         else {
  414.           if (lnum > maxls)        /* validate LineSpace    */
  415.             goto err;
  416.         }
  417.         Pval = lnum;
  418.         break;
  419.     }
  420.     if(flag && nflag)
  421.        Pval = -Pval;
  422.     return(erf);
  423. }
  424.  
  425. parmcheck(dialog,obj,mode,nflag)
  426. OBJECT    *dialog;
  427. int    obj, mode;
  428. int     nflag;
  429. {
  430.     char    **str;
  431.  
  432.     formval = obj;
  433.     str    = (char **)dialog[obj].ob_spec;
  434.     if (checkValue(*str,mode,nflag)) {
  435.         do_alert(BADINP);
  436.         return(1);
  437.     }
  438.     else    return(0);
  439. }
  440.  
  441. /*
  442.     Range check for point and set size
  443.     Value can be in 1/2 point increment and is stored in 1/8 point.
  444.     CG 8000, 8400, ep308 :    4 to 72 point
  445.     CG 8600 :        4 to 127.5 point
  446.     CG 8200 :        5 to 72 point    (from 36 to 72 only in
  447.                         1 point increment)
  448.     Atari Laser :        5 to 144 point
  449. */
  450. ptszck(sz)
  451. int    sz;
  452. {
  453.     if (setp.omod == 0)                /* TY 8600..    */
  454.         return(sz < 32 || sz > 1020);
  455.     else
  456.     if (setp.omod == 2)                /* TY 8200..    */
  457.         return(sz < 40 || sz > 576);
  458.     else
  459.     if (setp.omod == 5)                /* Laser...    */
  460.         return(sz < 40 || sz > 1152);
  461.     else    return(sz < 32 || sz > 576);    /* TY 8000, 8400, EP308 */
  462. }
  463.  
  464. whichSEL(obj,item,st,ct)
  465. OBJECT    *obj;
  466. char    *item;
  467. int    st, ct;
  468. {
  469.     int    i;
  470.  
  471.     for (i = st;i <= ct && !(obj[i].ob_state & SELECTED);++i);
  472.     if (i <= ct) {
  473.         *item = i - st;
  474.         return(1);
  475.     }
  476.     else    return(0);
  477. }
  478.  
  479. set_nor(obj,st,ct)
  480. OBJECT    *obj;
  481. int    st, ct;
  482. {
  483.     int    i;
  484.  
  485.     for (i = st;i <= ct;++i)
  486.         obj[i].ob_state = NORMAL;
  487. }
  488.  
  489. do_alert(msgno)
  490. int    msgno;
  491. {
  492.     char    *ptr;
  493.  
  494.     rsrc_gaddr(R_STRING,msgno,&ptr);
  495.     return(form_alert(1,ptr));
  496. }
  497.  
  498. set_str(tree,index,source,target)
  499. OBJECT    *tree;
  500. int    index;
  501. char    *source;
  502. char    *target;
  503. {
  504.     strcpy(target,source);
  505.     tree[index].ob_spec = (long)target;
  506. }
  507.  
  508. /********************************/
  509. /*    Use file selector    */
  510. /*    to get input file    */
  511. /********************************/
  512. gdosfname(filename,spec,check)
  513. char    *filename;
  514. int    spec, check;
  515. {
  516.     int    fs_iexbutton, ret;
  517.     char    *path, *fspec;
  518.  
  519. /*    Note:    filename large enough to hold
  520.         system path and user selection !    */
  521.     switch(spec) {
  522.     case 0:    path    = syspath;
  523.         fspec    = drsex;
  524.         break;
  525.     case 1:    path    = syspath;
  526.         fspec    = exdex;
  527.         break;
  528.     case 2:    path    = syspath;
  529.         fspec    = lytex;
  530.         break;
  531.     case 3:    path    = widpath;
  532.         fspec    = widex;
  533.         break;
  534.     case 4:    path    = dpath1;
  535.         fspec    = txtex;
  536.         break;
  537.     }
  538.     strcpy(filename,path);
  539.     strcat(filename,fspec);
  540.     fs_iinsel[0] = 0;
  541.     if (fsel_input(filename,fs_iinsel,&fs_iexbutton) &&
  542.         fs_iexbutton && fs_iinsel[0]) {
  543.         strunc(fs_iinsel);
  544.         strcat(fs_iinsel,fspec+1);
  545.         filetopath(filename);
  546.         strcat(filename,fs_iinsel);
  547.         if (check) {
  548.             if (!(ret = (!access(filename,0)))) {
  549.                 BWredraw();        /* redraw TW/PW    */
  550.                 setnfd(fs_iinsel,1);
  551.             }
  552.         }
  553.         else    ret = 1;
  554.     }
  555.     else    ret = 0;
  556.     BWredraw();                    /* redraw TW/PW    */
  557.     return(ret);
  558. }
  559.  
  560. dial1(dialog)
  561. OBJECT    *dialog;
  562. {
  563.     form_center(dialog,&deskx,&desky,&deskw,&deskh);
  564.     form_dial(0,0,0,0,0,deskx,desky,deskw,deskh);
  565.     form_dial(1,0,0,0,0,deskx,desky,deskw,deskh);
  566. }
  567.  
  568. dial2(dialog)
  569. OBJECT    *dialog;
  570. {
  571.     int    exit_obj;
  572.  
  573.     objc_draw(dialog,0,10,deskx,desky,deskw,deskh);
  574.     exit_obj = form_do(dialog,formval);
  575.     dialog[exit_obj].ob_state = NORMAL;
  576.     return(exit_obj);
  577. }
  578.  
  579. dial3()
  580. {
  581.     form_dial(2,0,0,0,0,deskx,desky,deskw,deskh);
  582.     form_dial(3,0,0,0,0,deskx,desky,deskw,deskh);
  583. }
  584.  
  585. filetopath(filename)
  586. char    *filename;
  587. {
  588.     int    i;
  589.     char    c;
  590.  
  591.     i = strlen(filename);
  592.     while (i && ((c = filename[i-1]) != '\\' && c != ':'))
  593.         --i;
  594.     filename[i] = 0;
  595. }
  596.  
  597. get_pgtype()
  598. {
  599.     return(pagetype - PA4);
  600. }
  601.